package top.yxqz.sprinmvc.params.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import top.yxqz.sprinmvc.params.pojo.User;

import javax.servlet.http.HttpServletRequest;

/**
 * @author: 余小小
 * @date: 2023/4/28
 * @description：接收参数 1.使用以前Javaweb的方式，使用请求域对象
 * 2.@requestParam
 * 3.@RequestHeader
 * 4.@CookieValue
 */
@Controller
@RequestMapping("/param")
public class ParamController {
    /**
     * 跳转去提交页面
     * uri:  /param/
     *
     * @return
     */
    @GetMapping("/")
    public String goTiJiao() {
        return "tijiao";
    }


    /**
     * 使用以前的方式，来获取参数信息
     * uri:  /param/oldservlet
     *
     * @return
     */
    @PostMapping("/oldservlet")
    public String doServletParam(HttpServletRequest request) {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        if (username.equals("admin") && password.equals("123456")) {
            return "hello";
        }
        return "tijiao";
    }

    /**
     * 使用@RequestParam注解来获取参数信息
     * 相关属性：
     * 1.value：前端的name属性值
     * 2.required：是否必须
     * 3.defaultValue：默认值
     * 建议，在定义方法的形式参数的时候，参数名字和前端的name属性值一模一样
     * 建议：在设计uri的尽量简短一点（也需要考虑见名知意）
     * uri:/param/req
     *
     * @param username
     * @param password
     * @return
     */
    @PostMapping("/req")
    public String doRequestParam(@RequestParam(value = "username", required = true, defaultValue = "admin_user") String username, @RequestParam("password") String password) {
        if (username.equals("admin") && password.equals("123456")) {
            return "hello";
        }
        return "tijiao";
    }

    /**
     * 得到请求头的数据 @RequestHeader
     * uri:  /param/header
     * 注意，请求头的名称必须和浏览器中存在的一样
     *
     * @return
     */
    @PutMapping("/header")
    public String getHeaderData(@RequestHeader("host") String headerData) {
        System.out.println("主机名称：" + headerData);
        return "hello";
    }


    /**
     * 通过对象来获取参数信息
     * 注意：前端的name值必须和对象的字段保持一致
     * uri:  /param/object
     * @return
     */
    @PostMapping("/object")
    public String getObjectData(User user) {
        System.out.println("这里是通过对象来封装前端数据（springmvc）");
        System.out.println("用户名：" + user.getUsername());
//        前端传递过来的条件，封装在user对象里了
        if (user.getUsername().equals("admin") && user.getPassword().equals("123456")) {
            return "hello";
        }
        return "tijiao";
    }
}
